#include "includes.h"
#include "DMA_UART.h"





/*
* DMA UART配置, 注意DMA和外设有固定的通道映射，需要配置成对应的才可以正常工作
* @param 	DMAy_Channelx	DMA1_Channel1 - DMA1_Channel7
							DMA2_Channel1 - DMA2_Channel5				
* @param 	UARTX			USART3	

* @param 	DMA_DIR 		DMA_DIR_PeripheralDST   外设作为数据源地址 
							DMA_DIR_PeripheralSRC  	外设作为数据目的地址 
* @param 	USART_DMAReq 	USART_DMAReq_Tx
							USART_DMAReq_Rx		
* @param 	buf		目标或者源地址的地址
* @param 	Size	目标或者源地址的大小
* @return 		
*/
void DMA_UART_CONFIG(DMA_Channel_TypeDef* DMAy_Channelx, USART_TypeDef *UARTX, UINT32 DMA_DIR, UINT16 USART_DMAReq, UINT8 *buf, UINT16 Size)
{	
	DMA_InitTypeDef DMA_InitStructure;   


	//串口发DMA配置  
	//启动DMA时钟	
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); 
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE); 
	
//------RX------ch3 设为接收------DMA--配置-----------------------------------------------------------------------------------------
    DMA_DeInit(DMAy_Channelx);   //重置DMA 2通道配置  	
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&UARTX->DR);			//0x40004C04;   //外设地址    
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)buf;     				//内存接收地址    
    DMA_InitStructure.DMA_DIR = DMA_DIR;   										//外设作为数据目的地址   
    DMA_InitStructure.DMA_BufferSize = Size;  							//DMA 内存地址寄存器 
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;    		//外设地址寄存器不递增
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;      				//内存地址寄存器递增  
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;     //外设地址宽度为8位   
    DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_Byte;  		//内存地址宽度为8位
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  							//工作在正常模式
    DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;  					//设置DMA通道优先级为高 
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;     							//禁止DMA通道设置为内存至内存传输
    DMA_Init(DMAy_Channelx, &DMA_InitStructure);     							//初始化
	        
//  DMA_ITConfig(DMA1_Channel3, DMA_IT_TC, ENABLE);  
//  DMA_ITConfig(DMA1_Channel3, DMA_IT_TE, ENABLE);  

	USART_DMACmd(UARTX, USART_DMAReq, ENABLE);  
}


















